import java.util.StringTokenizer;

import javax.swing.JOptionPane;


public class Mensajero {
	public synchronized void probarCoor(int x, int y, Tablero tab){
		tab.setVisible(true);
		tab.matBotones[x][y].setEnabled(false);
		if(tab.matriz[x][y]==0||tab.matriz[x][y]==9){
//			System.out.println("AGUA");
			notify();
		}else{
			int i=tab.matriz[x][y]-1;
			if(tab.barcos[i].comprobarCoor(x,y)){
//				System.out.println("TOCADO");
				tab.matBotones[x][y].setText("T");
				if(tab.barcos[i].estaHundido()){
//					System.out.println("HUNDIDO");
					JOptionPane.showMessageDialog(null, "Barco Hundido");
					if(tab.finJuego()){
//						System.out.println("Jugador ha ganado");
						JOptionPane.showMessageDialog(null, "El jugador ha ganado");
						System.exit(0);
					}
				}
			}
		}
//		tab.setVisible(false);
	}
	
	public synchronized void generarCoor(Maquina m){
		m.tableroEnemigo.setVisible(true);
		int n=(int)(Math.random()*m.max);
//		System.out.println(m.arrCoordenadas[n]);
		StringTokenizer str=new StringTokenizer(m.arrCoordenadas[n],",");
		int x=Integer.parseInt(str.nextToken());
		int y=Integer.parseInt(str.nextToken());
		m.arrCoordenadas=m.nuevoArray(m.arrCoordenadas,n);
		m.tableroEnemigo.matBotones[x][y].setEnabled(false);
		if(m.tableroEnemigo.matriz[x][y]==0||m.tableroEnemigo.matriz[x][y]==9){
//			System.out.println("AGUA");
			try {
				Thread.sleep(1500);
				m.tableroEnemigo.setVisible(false);
				wait();
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			int i=m.tableroEnemigo.matriz[x][y]-1;
			if(m.tableroEnemigo.barcos[i].comprobarCoor(x,y)){
//				System.out.println("TOCADO");
				m.tableroEnemigo.matBotones[x][y].setText("T");
				try {
					Thread.sleep(500);
				} catch (Exception e) {
					e.printStackTrace();
				}
				m.ponAgua(x,y);
				tocadoBarco(m.tableroEnemigo,i,x,y, m);
			}
		}
	}
	
	public synchronized void tocadoBarco(Tablero tab,int barco, int x, int y, Maquina m){
		m.tableroEnemigo.setVisible(true);
		Tablero tableroEnemigo=tab;
		int dir=(int)(Math.random()*4+1);
		boolean direccion=dir%2==0;
		final int xIni=x;
		final int yIni=y;
		int numVertical=(int)(Math.random()*4+1);
		boolean bVertical=numVertical%2==0;
		int numHorizontal=(int)(Math.random()*4+1);
		boolean bHorizontal=numHorizontal%2==0;
		int posicion=-1;
		do{
			if(direccion){
				if(bVertical){
					x++;
				}else{
					x--;
				}
				if(tableroEnemigo.barcos[barco].comprobarCoor(x,y)){
//					System.out.println("Tocado");
					m.tableroEnemigo.matBotones[x][y].setText("T");
					tableroEnemigo.matBotones[x][y].setEnabled(false);
					try {
						Thread.sleep(500);
					} catch (Exception e) {
						e.printStackTrace();
					}
					m.ponAgua(x,y);
					posicion=m.buscarCoor(x,y);
					if(posicion!=-1){
						m.arrCoordenadas=m.nuevoArray(m.arrCoordenadas,posicion);
					}
					if(tableroEnemigo.barcos[barco].estaHundido()){
//						System.out.println("barco "+barco+" hundido");
					}
					direccion=!direccion;
				}else{
//					System.out.println("Agua");
					try {
						tableroEnemigo.matBotones[x][y].setEnabled(false);
						Thread.sleep(1500);
						m.tableroEnemigo.setVisible(false);
						wait();
						Thread.sleep(1000);
						m.tableroEnemigo.setVisible(true);
					} catch (Exception e) {}
					bVertical=!bVertical;
					x=xIni;
				}
			}else{
				if(bHorizontal){
					y++;
				}else{
					y--;
				}	
				if(tableroEnemigo.barcos[barco].comprobarCoor(x,y)){
//					System.out.println("Tocado");
					m.tableroEnemigo.matBotones[x][y].setText("T");
					direccion=!direccion;
					tableroEnemigo.matBotones[x][y].setEnabled(false);
					try {
						Thread.sleep(500);
					} catch (Exception e) {
						e.printStackTrace();
					}
					m.ponAgua(x,y);
					posicion=m.buscarCoor(x,y);
					if(posicion!=-1){
						m.arrCoordenadas=m.nuevoArray(m.arrCoordenadas,posicion);
					}
					if(tableroEnemigo.barcos[barco].estaHundido()){
//						System.out.println("barco "+barco+" hundido");
					}
				}else{
//					System.out.println("Agua");
					try {
						tableroEnemigo.matBotones[x][y].setEnabled(false);
						Thread.sleep(1500);
						m.tableroEnemigo.setVisible(false);
						wait();
						Thread.sleep(1000);
						m.tableroEnemigo.setVisible(true);						
					} catch (Exception e) {}
					bHorizontal=!bHorizontal;
					y=yIni;
				}
			}				
			direccion=!direccion;
		}while(!tableroEnemigo.barcos[barco].estaHundido());
	}
}
